package com.cskaoyan.javase.oop3._2inner._4anonymous._1usecase;

/**
 * 匿名内部类的使用场景,它是特殊的局部内部类,而且要更加简洁
 *      一般来说,匿名内部类会基本覆盖局部内部类的用途
 *      比如作为方法的返回值
 *      比如作为方法的实参
 *
 * @since 16:35
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        method().test();
        method(new AbstractA(){
            @Override
            public void test() {
                System.out.println("我也很高级!");
            }
        });
        method(new IA(){
            @Override
            public void test() {
                System.out.println("我很优雅,高级!");
            }
        });
    }

    public static void method(AbstractA a){
        a.test();
    }

    public static void method(IA a){
        a.test();
    }
    public static NormalA method(){
        // return new NormalA();
        // 使用匿名内部类获取子类对象
        return new NormalA(){
            @Override
            public void test() {
                System.out.println("我比你高级!");
            }
        };
    }
}

abstract class AbstractA {
    public abstract void test();
}

class NormalA {
    public void test() {
        System.out.println("A");
    }
}

interface IA {
    void test();
}